from django.db import models


class Category(models.Model):
    """分类模型"""
    name = models.CharField(max_length=100)
    create_time = models.DateTimeField(auto_now_add=True)


class Article(models.Model):
    """文章模型"""
    title = models.CharField(max_length=100)
    content = models.TextField(null=False)
    create_time = models.DateTimeField(auto_now_add=True)

    # TODO: CASCADE：级联操作, 如果外键对应的那条数据被删除了，那么这条数据也会被删除。
    # category = models.ForeignKey('Category', on_delete=models.CASCADE)

    # TODO: PROTECT：受保护, 即只要这条数据引用了外键的那条数据，那么就不能删除外键的那条数据。
    # category = models.ForeignKey('Category', on_delete=models.PROTECT)

    # TODO: SET_NULL：设置为空，如果外键的那条数据被删除了，那么在本条数据上就将这个字段设置为空。
    #  如果设置这个选项，前提是要`指定这个字段可以为空`。
    # category = models.ForeignKey('Category', on_delete=models.SET_NULL, null=True)

    # TODO: SET_DEFAULT：设置默认值。如果外键的那条数据被删除了，那么本条数据上就将这个字段设置为默认值。
    #  如果设置这个选项，前提是要`指定这个字段一个默认值`
    # category = models.ForeignKey('Category', on_delete=models.SET_DEFAULT, default=Category.objects.get(pk=4))

    # TODO: SET()：如果外键的那条数据被删除了。那么将会获取SET函数中的值来作为这个外键的值。
    #  SET函数可以接收一个可以调用的对象（比如函数或者方法），如果是可以调用的对象，那么会将这个对象调用后的结果作为值返回回去。
    # category = models.ForeignKey('Category', on_delete=models.SET(Category.objects.get(pk=5)))

    # TODO: DO_NOTHING：不采取任何行为。一切全看数据库级别的约束
    category = models.ForeignKey('Category', on_delete=models.DO_NOTHING)
